# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.NetworkServices.V1.Model.AuthzExtension do
  @moduledoc """
  `AuthzExtension` is a resource that allows traffic forwarding to a callout backend service to make an authorization decision.

  ## Attributes

  *   `authority` (*type:* `String.t`, *default:* `nil`) - Required. The `:authority` header in the gRPC request sent from Envoy to the extension service.
  *   `createTime` (*type:* `DateTime.t`, *default:* `nil`) - Output only. The timestamp when the resource was created.
  *   `description` (*type:* `String.t`, *default:* `nil`) - Optional. A human-readable description of the resource.
  *   `failOpen` (*type:* `boolean()`, *default:* `nil`) - Optional. Determines how the proxy behaves if the call to the extension fails or times out. When set to `TRUE`, request or response processing continues without error. Any subsequent extensions in the extension chain are also executed. When set to `FALSE` or the default setting of `FALSE` is used, one of the following happens: * If response headers have not been delivered to the downstream client, a generic 500 error is returned to the client. The error response can be tailored by configuring a custom error response in the load balancer. * If response headers have been delivered, then the HTTP stream to the downstream client is reset.
  *   `forwardHeaders` (*type:* `list(String.t)`, *default:* `nil`) - Optional. List of the HTTP headers to forward to the extension (from the client). If omitted, all headers are sent. Each element is a string indicating the header name.
  *   `labels` (*type:* `map()`, *default:* `nil`) - Optional. Set of labels associated with the `AuthzExtension` resource. The format must comply with [the requirements for labels](/compute/docs/labeling-resources#requirements) for Google Cloud resources.
  *   `loadBalancingScheme` (*type:* `String.t`, *default:* `nil`) - Required. All backend services and forwarding rules referenced by this extension must share the same load balancing scheme. Supported values: `INTERNAL_MANAGED`, `EXTERNAL_MANAGED`. For more information, refer to [Backend services overview](https://cloud.google.com/load-balancing/docs/backend-service).
  *   `metadata` (*type:* `map()`, *default:* `nil`) - Optional. The metadata provided here is included as part of the `metadata_context` (of type `google.protobuf.Struct`) in the `ProcessingRequest` message sent to the extension server. The metadata is available under the namespace `com.google.authz_extension.`. The following variables are supported in the metadata Struct: `{forwarding_rule_id}` - substituted with the forwarding rule's fully qualified resource name.
  *   `name` (*type:* `String.t`, *default:* `nil`) - Required. Identifier. Name of the `AuthzExtension` resource in the following format: `projects/{project}/locations/{location}/authzExtensions/{authz_extension}`.
  *   `service` (*type:* `String.t`, *default:* `nil`) - Required. The reference to the service that runs the extension. To configure a callout extension, `service` must be a fully-qualified reference to a [backend service](https://cloud.google.com/compute/docs/reference/rest/v1/backendServices) in the format: `https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/backendServices/{backendService}` or `https://www.googleapis.com/compute/v1/projects/{project}/global/backendServices/{backendService}`.
  *   `timeout` (*type:* `String.t`, *default:* `nil`) - Required. Specifies the timeout for each individual message on the stream. The timeout must be between 10-10000 milliseconds.
  *   `updateTime` (*type:* `DateTime.t`, *default:* `nil`) - Output only. The timestamp when the resource was updated.
  *   `wireFormat` (*type:* `String.t`, *default:* `nil`) - Optional. The format of communication supported by the callout extension. If not specified, the default value `EXT_PROC_GRPC` is used.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :authority => String.t() | nil,
          :createTime => DateTime.t() | nil,
          :description => String.t() | nil,
          :failOpen => boolean() | nil,
          :forwardHeaders => list(String.t()) | nil,
          :labels => map() | nil,
          :loadBalancingScheme => String.t() | nil,
          :metadata => map() | nil,
          :name => String.t() | nil,
          :service => String.t() | nil,
          :timeout => String.t() | nil,
          :updateTime => DateTime.t() | nil,
          :wireFormat => String.t() | nil
        }

  field(:authority)
  field(:createTime, as: DateTime)
  field(:description)
  field(:failOpen)
  field(:forwardHeaders, type: :list)
  field(:labels, type: :map)
  field(:loadBalancingScheme)
  field(:metadata, type: :map)
  field(:name)
  field(:service)
  field(:timeout)
  field(:updateTime, as: DateTime)
  field(:wireFormat)
end

defimpl Poison.Decoder, for: GoogleApi.NetworkServices.V1.Model.AuthzExtension do
  def decode(value, options) do
    GoogleApi.NetworkServices.V1.Model.AuthzExtension.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.NetworkServices.V1.Model.AuthzExtension do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
